package operation.template.abs;

public abstract class AbsClass {
    // 将模板方法定为final类型，防止子类重写
    public final void template() {
        method1();
        if (shouldDoMethod2()) {
            method2();
        }
        method3();
    }

    public abstract void method1();

    public abstract void method2();

    public void method3() {
        // ... 某些方法可以在抽象层实现
    }

    // 钩子方法
    // 子类按需抽个血
    protected boolean shouldDoMethod2() {
        return true;
    }
}
